package com.gp.dal.typehandler;

import java.sql.*;

import org.apache.ibatis.type.TypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static org.apache.ibatis.type.JdbcType.VARCHAR;
/**
 * 
 * @author 自定义字符串解析器，在字符串的开头添加GP
 *
 */
@MappedJdbcTypes(VARCHAR)
@MappedTypes(String.class)
public class StringType implements TypeHandler<String>{
	private final Logger logger = LoggerFactory.getLogger(this.getClass());
	/**
	 * 用于定义在Mybatis设置参数时该如何把Java类型的参数转换为对应的数据库类型
	 * @param ps 当前的PreparedStatement对象
	 * @param i 当前参数的位置
	 * @param parameter 当前参数的Java对象
	 * @param jdbcType 当前参数的数据库类型
	 * @throws SQLException
	 */
	public void setParameter(PreparedStatement ps, int i, String parameter,
			JdbcType jdbcType) throws SQLException {
		if(parameter==null){
			ps.setNull(i, Types.VARCHAR);
		}else{
			StringBuffer result = new StringBuffer();
			result.append("GP").append(parameter);
			ps.setString(i,result.toString());
		}
	}
	/**
	 * 用于在Mybatis获取数据结果集时如何把数据库类型转换为对应的Java类型
	 * @param rs 当前的结果集
	 * @param columnName 当前的字段名称
	 * @return 转换后的Java对象
	 * @throws SQLException
	 */
	public String getResult(ResultSet rs, String columnName)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	/**
	 * 用于在Mybatis通过字段位置获取字段数据时把数据库类型转换为对应的Java类型
	 * @param rs 当前的结果集
	 * @param columnIndex 当前字段的位置
	 * @return 转换后的Java对象
	 * @throws SQLException
	 */
	public String getResult(ResultSet rs, int columnIndex) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	/**
	 * 用于Mybatis在调用存储过程后把数据库类型的数据转换为对应的Java类型
	 * @param cs 当前的CallableStatement执行后的CallableStatement
	 * @param columnIndex 当前输出参数的位置
	 * @return
	 * @throws SQLException
	 */
	public String getResult(CallableStatement cs, int columnIndex)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	
}
